package com.xinsilu.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwt;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * jwt 工具类
 *
 *时间工具类
 * 字符串工具类
 */
public class JwtUtils {

//    /**
//     * 主题，一般指这个jwt的所有者
//     */
//    public static final String SUBJECT = "YOUYOU";
//    /**
//     * 超时时间
//     */
//    public static final long EXPIRE = 1000*60*60*7;
//
//
//    /**
//     * 密钥，很重要，一定不能泄露
//     */
//    public static final String APPSECRET = "T9101";
//
//
//
//
//    /**
//     * 通过jwt生成token
//     * 可以使用jwts工具类设置jwt的各个部分
//     * 登录成功时候调用
//     * @return
//     */
//    public static String createJWT(Ceshi ceshi){
//        if(ceshi==null){
//            return  null;
//        }else{
//            /* 封装claims(负载)信息。就是jwt中的Payload部分信息，
//               这部分信息可以一次性放置到一个Map对象中，也可以一个一个单独设置
//               下面是一次性放到Map对象中。
//               注意：jwt中不要放置敏感信息，比如密码
//             */
//            Map<String,Object> map = new HashMap<>();
//            map.put("id",ceshi.getId());
//            map.put("name",ceshi.getZichanName());
//            // 生成token字符串
//            String token = Jwts.builder()
//                    .setSubject(SUBJECT) // 设置主题
//                    .setClaims(map) // 一次性设置claims信息
//                    .setIssuedAt(new Date()) // 设置签发时间
//                    .setExpiration(new Date(System.currentTimeMillis()+EXPIRE)) // 设置超时时间，注意：要在设置负载代码后面，不然超时会失效
//                    .signWith(SignatureAlgorithm.HS256,APPSECRET) // 设置签名算法和密钥
//                    .compact(); // 生成 token
//            return token;
//        }
//    }
//
//    public  static void main(String[] args){
////        Ceshi ceshi =new Ceshi();
////        ceshi.setId(2);
////        ceshi.setZichanName("试试");
////        String toke=JwtUtils.createJWT(ceshi);
////        System.out.println(toke);
//        String token = "eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjpudWxsLCJpZCI6MTIzLCJleHAiOjE2MzE4MDQxMzAsImlhdCI6MTYzMTc3ODkzMH0.OBTtYFCmv29QoZ5ZpNTtH1B8xU6OQrAlt8TVKpZFPPI";
//        Claims claims = JwtUtils.checkJwt(token);
//        System.out.println(claims);
//
//
//        if(claims==null){
//            System.out.println("验证失败");
//        }else {
//            String name = claims.get("name",String.class);
//            System.out.println(name);
//        }
//
//    }
//
//    /**
//     * 验证token信息
//     * 验证失败则返回null
//     * 验证成功则返回Claims对象，即负载信息
//     * @param token
//     * @return
//     */
//    public static Claims checkJwt(String token){
//
//        try {
//            // 使用密钥进行验签
//            final Claims claims = Jwts.parser().setSigningKey(APPSECRET).parseClaimsJws(token).getBody();
//            return claims;
//        }catch (Exception e){
//            e.printStackTrace();
//            return null;
//        }
//
//    }

}
